#pragma once
#include "GameState.hpp"
#include "GameWorld.hpp"
#include "GameObject.hpp"
#include "GameComponent.hpp"
#include "Transform.hpp"
#include "Renderable.hpp"
#include "Hierarchy.hpp"
#include "TransformHierarchy.hpp"
#include "RenderSystem.hpp"
#include "TransformRotator.hpp"
#include "TransformMover.hpp"
#include "Texture.hpp"
#include "PhysicsSystem.hpp"

using namespace Typhoon;
class TestEngine : public GameState
{
public:
	void Initialize() ;
	void Update(float dt);
	void Render();
private:

	void Click(InputManager::EventData event);

	GameObject camera;

	GameWorld world;
	
	Mesh mesh;

	GameObject* CreateCube(Vector3 position);
	GameObject* CreatePhysicsCube(Vector3 position);

	GameObject* rotator;
	GameObject* sub;

	TransformRotator transformRotator;
	TransformMover transformMover;

	TransformHierarchy transformHierarchy;


	RenderSystem<Renderable> renderer;

	PhysicsSystem physics;

	Texture texture;

};
